package com.dbms.transaction;

/**
 * 事务上下文类（Transaction）
 * 核心职责：封装单个事务的基本信息，包括唯一标识（事务ID）和当前状态，
 * 是事务管理的基础数据结构，用于跟踪事务的生命周期。
 */
public class Transaction {

    /**
     * 事务状态枚举：定义事务在生命周期中可能的状态
     * - RUNNING：事务正在执行中，可进行数据操作
     * - COMMITTED：事务已成功提交，所有更改已持久化
     * - ABORTED：事务已中止（回滚），所有更改已撤销
     */
    public enum State {
        RUNNING,    // 事务运行中
        COMMITTED,  // 事务已提交
        ABORTED     // 事务已中止（回滚）
    }

    // 事务唯一标识：由事务管理器（TransactionManager）分配，确保全局唯一
    private final int transactionId;
    // 事务当前状态：初始为RUNNING，随事务操作（提交/回滚）切换
    private State state;

    /**
     * 构造函数：初始化事务ID并设置初始状态为RUNNING
     * @param transactionId 事务唯一标识（由事务管理器分配）
     */
    public Transaction(int transactionId) {
        this.transactionId = transactionId;
        this.state = State.RUNNING; // 事务创建后默认处于运行状态
    }

    /**
     * 获取事务唯一标识
     * @return 事务ID（int类型）
     */
    public int getTransactionId() {
        return transactionId;
    }

    /**
     * 获取事务当前状态
     * @return 事务状态（State枚举值）
     */
    public State getState() {
        return state;
    }

    /**
     * 设置事务状态（用于事务提交、回滚等状态转换）
     * @param state 新的事务状态（需符合事务状态转换规则）
     */
    public void setState(State state) {
        this.state = state;
    }
}